/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package compilador.datos;

import java.io.*;


/**
 *
 * @author Iñaki Goffard
 */
public class Archivo {
    public static final int MODO_LECTURA = 0;
    public static final int MODO_ESCRITURA = 1;
    
    private FileReader fr;
    private BufferedReader br;
    /* atributo "buff" que permitirá saber al analizador léxico cuando se ha llegado
     * al fin de fichero
     */
    private FileWriter fw;
    private BufferedWriter bw;
    private int buff;
    private int modo;   //Modo de trabajo del archivo L/E
    private String rutaArchivoObj;//Útil para poder borrarlo si es necesario
    private boolean bError;     //Detecta si ha habido algun error al abrir el archivo.
    
    public Archivo (BufferedReader brd, int iModo){
        
        this.br=brd;
        this.bError = false;
        
    }
    
    public Archivo (BufferedWriter brw, int iModo){
        
        this.bw=brw;
        this.bError = false;
        
    }
     public Archivo (BufferedReader brd){
        
            this.br=brd;
            this.bError = false;
        
        }
    
    
    public Archivo (String sNombre, int iModo){
        this.modo = iModo;
        this.bError = false;
        if (this.modo == MODO_LECTURA ){
            try{
             //Ojo a la configuración en NetBeans de las rutas relativas
             this.fr = new FileReader(sNombre);
             this.br = new BufferedReader(this.fr);
            }
            catch (Exception e){
                this.bError = true;
            }
        }else{
            try{
             //Ojo a la configuración en NetBeans de las rutas relativas
             this.fw = new FileWriter(sNombre);
             this.bw = new BufferedWriter(this.fw);
             this.rutaArchivoObj = sNombre;
            }
            catch (Exception e){
                this.bError = true;
            }
        }
    }
    

    public int getBuff (){
        if (!this.bError)
            return this.buff;
        else
            return -1;
        
    }

    public char siguienteCar () {
        char car =' ';//Incializo a vacío.
        try {
            this.buff = this.br.read();
            car =(char) this.buff;
        }
        catch(Exception e){
           this.bError = true;
        }//finally {
           // if (this.br != null) {
             //   this.cierraArchivo();
            //}//Aunque haya un error, que cierre el archivo
        //}
        return car;
    }

    /**
     * Escribe en el fichero la cadena recibida como parametro
     * @param sCadena
     */
    public void escribe (String sCadena){
        try {
            this.bw.write(sCadena);
        } catch(Exception e){
            e.printStackTrace();
        }
    }

    public void cierraArchivo (){
        if ( this.modo == MODO_LECTURA ) {
            try {
                this.br.close();
                this.fr.close();
            } catch (Exception e) {
                this.bError = true;
            }
        }else{
            try {
                this.bw.close();
                this.fr.close();
            } catch (Exception e) {
                this.bError = true;
            }
        }
    }

    /**
     * @return the bError
     */
    public boolean getError() {
        return bError;
    }

}

//}
